const { getMultiLangText } = require('../common/utils')

/**
 * 通用多语言数据转换器
 * @param {Array|Object} data 原始数据（可以是数组或单个对象）
 * @param {string} language 目标语言
 * @param {Object} fieldMapping 字段映射配置
 * @returns {Array|Object} 转换后的数据
 */
function transformMultiLangData(data, language = 'zh-Hans', fieldMapping = {}) {
	if (!data) {
		return data
	}
	
	// 默认的多语言字段映射
	const defaultFieldMapping = {
		multiLangFields: ['label', 'description'], // 需要转换的多语言字段
		keepFields: ['_id', 'value', 'sort', 'icon', 'color', 'status', 'is_default', 'extra', 'create_time', 'update_time'], // 保留的字段
		idMapping: { '_id': 'id' } // ID字段映射
	}
	
	// 合并配置
	const config = Object.assign({}, defaultFieldMapping, fieldMapping)
	
	/**
	 * 转换单个对象
	 */
	function transformSingleItem(item) {
		if (!item || typeof item !== 'object') {
			return item
		}
		
		const transformed = {}
		
		// 处理ID映射
		Object.keys(config.idMapping).forEach(originalKey => {
			if (item[originalKey] !== undefined) {
				const newKey = config.idMapping[originalKey]
				transformed[newKey] = item[originalKey]
			}
		})
		
		// 处理多语言字段
		config.multiLangFields.forEach(field => {
			if (item[field]) {
				transformed[field] = getMultiLangText(item[field], language)
			}
		})
		
		// 保留其他字段
		config.keepFields.forEach(field => {
			if (item[field] !== undefined) {
				transformed[field] = item[field]
			}
		})
		
		// 设置默认值
		transformed.sort = transformed.sort || 0
		transformed.status = transformed.status !== undefined ? transformed.status : 1
		transformed.is_default = transformed.is_default || 0
		transformed.extra = transformed.extra || {}
		
		return transformed
	}
	
	// 处理数组
	if (Array.isArray(data)) {
		return data.map(transformSingleItem)
	}
	
	// 处理单个对象
	return transformSingleItem(data)
}

/**
 * 字典数据列表转换器（向后兼容）
 * @param {Array} dataList 字典数据列表
 * @param {string} language 目标语言
 * @returns {Array} 转换后的数据列表
 */
function transformDictDataList(dataList, language = 'zh-Hans') {
	return transformMultiLangData(dataList, language, {
		multiLangFields: ['label', 'description'],
		keepFields: ['value', 'sort', 'icon', 'color', 'status', 'is_default', 'extra', 'create_time', 'update_time'],
		idMapping: { '_id': 'id' }
	})
}

/**
 * 图案分类转换器
 * @param {Array} dataList 图案分类数据列表
 * @param {string} language 目标语言
 * @returns {Array} 转换后的分类列表
 */
function transformPatternCategories(dataList, language = 'zh-Hans') {
	return transformMultiLangData(dataList, language, {
		multiLangFields: ['label', 'description'],
		keepFields: ['value', 'sort', 'icon', 'color', 'status', 'is_default', 'extra'],
		idMapping: { '_id': 'id' }
	})
}

/**
 * 热门播放列表类型转换器
 * @param {Array} dataList 播放列表类型数据列表
 * @param {string} language 目标语言
 * @returns {Array} 转换后的类型列表
 */
function transformFeaturedPlaylistTypes(dataList, language = 'zh-Hans') {
	return transformMultiLangData(dataList, language, {
		multiLangFields: ['label', 'description'],
		keepFields: ['value', 'sort', 'icon', 'color', 'status', 'is_default', 'extra'],
		idMapping: { '_id': 'id' }
	})
}

module.exports = {
	transformMultiLangData,
	transformDictDataList,
	transformPatternCategories,
	transformFeaturedPlaylistTypes
}